Perf & Flame Graph 介绍和使用

Flame Graph可以提供可视化的性能分析能力,以SVG格式呈现,可缩放查看局部,方便快速定位出CPU效能瓶颈。Flame Graph统计了采样周期内,code-path被执行的时间比例,纵轴是code-path,从下至上一般就是call stack。横轴是某个stack的占用时间,跨度越大说明其占CPU比重越高,也就是最耗费CPU的,stack在横轴上是按照字母序排列的,颜色深浅仅仅是为了区分,并没特殊意义。

以下将说明Flame Graph产生流程:

  1. 用perf获取系统执行状态

    • Step 1:在EVB上执行perf record

      # ./perf record -a -g sleep 10
      
      -a 表示cpu
      
      -o 指定输出文件,若未指定则自动在当前目录下存盘名为perf.data
      
      -g 纪录call stack
      
      sleep 指定持续时间, 单位为秒
      

      若执行时显示,表示系统缺少GCC runtime library, 请把libgcc_s.so.1放到 /mnt或其他路径下, 并将该路径加入LD_LIBRARY_PATH

      # export LD_LIBRARY_PATH=/mnt:/lib
      
    • Step 2:执行 perf report展开刚刚存下的data进行分析

      # ./perf report
      

      将直接在console上显示各个leaf functions的call stack及运行时间比例

      若要直接进行FlameGraph分析, 则不一定要进行 perf report

  2. 用data产生火焰图

    • Step 1:在EVB上执行 perf script 对 data进行解析, 并将输出结果存档至p1

      # ./perf script -i perf.data > p1
      
    • Step 2:切换到PC端, 点击获取FlameGraph,于PC端执行FlameGraph提供的stackcollapse-perf指令对p1进行符号折迭并存盘

      # stackcollapse-perf.pl p1 &> perf.folder
      
    • Step 3:于PC端执行FlameGraph提供的p1将perf.folder转换为svg档,生成的svg档可直接用浏览器开启 (建议使用Chrome或Firefox)

      # flamegraph.pl perf.folder > perf.svg
      

      生成火焰图(Flame Graph)命令:

      ./perf record -a -g -F 2599 -p 451 sleep 30
      ./perf script -i perf.data > p1
      ./stackcollapse-perf.pl p1 &> perf.folder
      ./flamegraph.pl perf.folder > perf.svg
      

参考:

https://www.jianshu.com/p/9a597ff4f5de

https://linux.cn/article-4670-1.html